Backend for Frontend (BFF) Nedir?
Backend for Frontend (BFF) Nedir?
Backend for Frontend (BFF), birçok farklı istemci türüne hizmet veren çoklu istemci uygulamaları geliştirirken kullanılan bir tasarım desenidir. Bu desen, her istemci türü için özel bir backend sunucusu sağlar ve bu sayede her istemcinin ihtiyaçlarını karşılamak için optimize edilmiş bir arka uç hizmeti sunar. BFF, özellikle mikro hizmet mimarileri ve tek sayfalık uygulamalar gibi uygulama geliştirme yaklaşımlarıyla uyumlu çalışır.

BFF Neden Kullanılır?
Geleneksel uygulamalardan farklı olarak, modern uygulamalar genellikle farklı istemci türlerine (web, mobil, masaüstü) hizmet verir. Her bir istemci, farklı özelliklere, kullanıcı deneyimlerine ve performans gereksinimlerine sahip olabilir. Bu durumda, tek bir genel amaçlı backend sunucusu tüm istemcileri desteklemek için yeterli olmayabilir. Bu noktada Backend for Frontend devreye girer ve her bir istemci türü için özel bir backend sunucusu sağlar.
Nasıl Çalışır?
Bir BFF, her istemci türü için bir arka uç sunucusu olarak hareket eder. Örneğin, bir web uygulaması için bir BFF, web istemcisi için optimize edilmiş API’ları sunar. Benzer şekilde, bir mobil uygulama için başka bir BFF, mobil istemcilerin ihtiyaçlarını karşılayacak şekilde tasarlanmış API’ları sunar.
Backend for Frontend Örnekleri
- Web Uygulaması İçin BFF: Bir web uygulaması için BFF, tarayıcıda çalışan istemciler için optimize edilmiş API’ları sunar. Bu API’lar genellikle tek sayfalık uygulamaların ihtiyaçlarına yöneliktir ve gereksiz veri alışverişini önlemek için verileri önişler.
- Mobil Uygulama İçin BFF: Bir mobil uygulama için BFF, düşük bant genişliği ve değişken ağ koşulları gibi mobil cihazların özelliklerini dikkate alır. Bu, mobil istemcilerin hızlı ve düşük maliyetli veri alışverişi yapmalarını sağlar.
- API Gateway Olarak BFF: Bir şirketin birden fazla hizmete sahip mikro hizmet mimarisinde, BFF API gateway olarak hareket edebilir. Bu, istemcilere hizmet veren farklı mikro hizmetlerin karmaşıklığını gizler ve tek bir noktadan erişilebilir bir API sunar.
Bir json çıktısı ile örneklendirecek olursak;
{
"routes": [
{
"url": "/api/web",
"methods": {
"GET": {
"description": "Get data for web client",
"parameters": {
"param1": "value1",
"param2": "value2",
"param3": "value3",
"param4": "value4",
"param5": "value5",
"param6": "value6"
}
},
"POST": {
"description": "Post data for web client",
"parameters": {
"param1": "value1",
"param2": "value2",
"param3": "value3",
"param4": "value4",
"param5": "value5",
"param6": "value6"
}
}
}
},
{
"url": "/api/mobile",
"methods": {
"GET": {
"description": "Get data for mobile client",
"parameters": {
"param1": "value1",
"param2": "value2",
"param3": "value3",
"param4": "value4",
"param5": "value5",
"param6": "value6"
}
},
"POST": {
"description": "Post data for mobile client",
"parameters": {
"param1": "value1",
"param2": "value2",
"param3": "value3",
"param4": "value4",
"param5": "value5",
"param6": "value6"
}
}
}
}
]
}
BFF Avantajları:
- İstemciye Özgü Optimizasyon: Her istemci türü için özel bir backend sunucusu sağlayarak, BFF istemci tarafında performansı artırabilir ve daha iyi kullanıcı deneyimi sağlayabilir. Örneğin, web istemcileri için optimize edilmiş API’lar web uygulamalarının hızını artırabilir.
- Karmaşıklığın Azalması: BFF, istemci tarafında gereksiz karmaşıklığı azaltır. İstemciler, sadece ihtiyaç duydukları verilere erişirler ve veri işleme veya dönüşüm süreçlerinden kurtulurlar.
- Bağımsızlık ve Esneklik: Her istemci türü için ayrı bir BFF kullanarak, istemci ve sunucu arasında bağımsızlık sağlanır. Bu, istemcilerin özelliklerini ve gereksinimlerini değiştirmek için daha fazla esneklik sunar.
- Geliştirme Hızını Artırma: Farklı istemci türlerine yönelik ayrı BFF’ler kullanarak, ekip üyeleri istemci ve sunucu kodunu daha bağımsız bir şekilde geliştirebilir ve dağıtabilir. Bu, geliştirme hızını artırabilir.
BFF Dezavantajları:
- Artan Karmaşıklık: Birden fazla BFF kullanmak, sistemde artan karmaşıklığa neden olabilir. Her bir istemci türü için ayrı bir backend sunucusu yönetmek, ekstra iş yükü ve yönetim gerektirebilir.
- İstemci Sayısına Bağımlılık: BFF, her istemci türü için ayrı bir backend sunucusu sağlar. Bu, yeni bir istemci türü eklenmesi durumunda ekstra bir BFF’nin geliştirilmesi ve yönetilmesi gerektiği anlamına gelir.
- İstemci ve Sunucu Arasındaki Trafik: Birden fazla BFF kullanmak, istemci ve sunucu arasındaki trafiği artırabilir. Her istemci türü için ayrı bir backend sunucusu olduğunda, istemcilerin farklı BFF’ler arasında iletişim kurması gerekebilir, bu da artan ağ trafiğine neden olabilir.
- Ekstra Geliştirme ve Bakım Maliyetleri: Her istemci türü için ayrı bir BFF geliştirmek ve yönetmek, ekstra geliştirme ve bakım maliyetlerine neden olabilir. Bu, projenin genel maliyetini artırabilir.
Sonuç
Backend for Frontend, modern uygulama geliştirme ortamlarında çoklu istemci ihtiyacını karşılamak için güçlü bir araçtır. Her istemci türü için optimize edilmiş bir arka uç sunarak, daha iyi performans, daha iyi kullanıcı deneyimi ve daha kolay bakım sağlar. Bu nedenle, çoklu istemci uygulamaları geliştirirken BFF kullanmak, genellikle tercih edilen bir yaklaşımdır.
Kaynaklar :
Backends for Frontends pattern – Azure Architecture Center | Microsoft Learn
Backends for Frontends Pattern | Front-End Web & Mobile (amazon.com)



